Linux Tmux 工具
Tmux 是什么?
Tmux 是 Screen 的替代品,虽然早就听说过这个 Tmux 了,但是一直没有抽出时间来学习
apt-get install tmux
列出所有快捷键
# 列出所有快捷键,及其对应的 Tmux 命令
tmux list-keys
tmux 默认的前缀操作都是 ctrl + b (类似 screen 的 ctrl + a),所有的快捷键都是 ctrl + b,按完松开,再去按下一个功能键!,不是一下子全按上(下文 C 代表 ctrl)
注意:在 Tmux 中
- 一个 window 可以有好多个 panel。
- 一个 session 可以有好多个 window。
- 一个 tmux 可以有好多个 session。
配置
配置快捷键
#首先创建几个alias
vi ~/.zshrc
alias tls="tmux ls"
alias ta="tmux attach -t "
alias tk="tmux kill-session -t"
alias ts="tmux switch -t "
alias tn="tmux new -s"
编辑配置文件
touch ~/.tmux.conf
vi ~/.tmux.conf
set -g default-terminal 'screen-256color' # 设置默认颜色
set -g status-utf8 on # 支持 utf-8
set -g history-limit 100000 # 设置历史记录最大条数
setw -g mode-keys vi # 设置按键模式为 Vi 模式
# 例如把快捷键改成 c-x
set -g prefix C-x
unbind C-b
bind C-x send-prefix
# 以下配置为取消原有 hjkl 键的绑定
# 并绑定 Pane 选择,和 Vim 操作一致
unbind-key h
bind-key h select-pane -L
unbind-key j
bind-key j select-pane -D
unbind-key k
bind-key k select-pane -U
unbind-key l
bind-key l select-pane -R
bind-key u command-prompt -p "join pane from:" "join-pane -s '%%'"
bind-key s command-prompt -p "send pane to:" "join-pane -t '%%'"
鼠标滚屏
tmux 默认配置中最糟糕的体验就是滚屏查看和文本复制(大家可以先试试看)。你需要先使用 ⌃b [
快捷键进入 copy 模式,然后使用翻页、字符定位来选择需要的字符,效率远没有鼠标选择来的快。
因此 tmux 提供了一些个性化配置项来优化这些配置,首先在 shell 中运行 touch ~/.tmux.conf 新建用户配置文件。在文件中增加以下内容:
# 开启鼠标模式
set -g mode-mouse on
# 允许鼠标选择窗格
set -g mouse-select-pane on
# 如果喜欢给窗口自定义命名,那么需要关闭窗口的自动命名
set-option -g allow-rename off
# 如果对 vim 比较熟悉,可以将 copy mode 的快捷键换成 vi 模式
set-window-option -g mode-keys vi
# tmux v2.1 开始 mouse 相关选项(包括 mouse-mode mouse-resize-pane mouse-select-pane mouse-select-window)改成
set-option -g mouse on # 变成了一个选项,,,
配置文件修改完成后,可以 tmux kill-server
重启所有 tmux 进程,或者在 tmux 会话中使用 ⌃b
:
进入控制台模式,输入 source-file ~/.tmux.conf
命令重新加载配置。(这个 ⌃b
指 Ctrl + b)
会话操作
创建会话
# 创建新的会话
tmux
# 创建新的会话,并自定义会话名为test
tmux new -s test
# 创建新的终端,并自定义终端名为test, 但不进入会话
tmux new -s test -d
如果上面使用命令的出现以下错误
sessions should be nested with care, unset $TMUX to force
直接命令行输入 unset TMUX
就可以了
或者使用快捷键 C + b,c 创建
暂时离开会话(挂后台)
tmux 有2 种方法当当前会话置于后台:
- 方法1: ctrl + b , 松开后再输入 d
- 方法2: 直接输入 tmux detach
查看已创建会话
tmux ls
重命名会话
# 重命名会话
tmux rename-session -t 0 <new-name>
或者
# 重命名当前会话
C + b $
进入会话
# 默认进入第一个会话
tmux a
# 进入到名称为test的会话
tmux a -t test
# 其实完整命令为 tmux attach-session, 使用中一般都是简写为tmux a
切换其他会话
# 使用 session 编号切换
tmux switch -t 0
# 使用 session 名称切换
tmux switch -t <session-name>
或者使用快捷键
# 选择需要跳转的session会话
C + b s
断开会话
# 断开当前session
C + b d
退出并删除会话
exit 或 ctrl + d
强制删除会话
# 仅仅删除 test 会话(即使是 attached 状态,也会删除)
tmux kill-session -t test
# 删除所有会话(attached状态的会略过)
tmux kill-session
窗口操作
分屏操作全部命令
% 左右平分出两个窗格
" 上下平分出两个窗格
x 关闭当前窗格
{ 当前窗格前移
} 当前窗格后移
; 选择上次使用的窗格
o 选择下一个窗格,也可以使用上下左右方向键来选择
space 切换窗格布局,tmux 内置了五种窗格布局,也可以通过 ⌥1 至 ⌥5来切换
z 最大化当前窗格,再次执行可恢复原来大小
q 显示所有窗格的序号,在序号出现期间按下对应的数字,即可跳转至对应的窗格
窗口操作全部命令
c 新建窗口,此时当前窗口会切换至新窗口,不影响原有窗口的状态
p 切换至上一窗口
n 切换至下一窗口
w 窗口列表选择,注意 macOS 下使用 ⌃p 和 ⌃n 进行上下选择
& 关闭当前窗口
, 重命名窗口,可以使用中文,重命名后能在 tmux 状态栏更快速的识别窗口 id
0 切换至 0 号窗口,使用其他数字 id 切换至对应窗口
f 根据窗口名搜索选择窗口,可模糊匹配
快速:子窗口管理
# 创建子窗口
ctrl+b c
# 显示列表
ctrl+b w
# 关闭子窗口
ctrl+b x
# 修改窗口名
ctrl+b ,
快速:分屏
# 上下分屏
ctrl+b "
# 左右分屏
ctrl+b %
# 此时可以用 ctrl+b h/j/k/l 来切换分屏了
在 shell 脚本中使用
# tmux 使用 send 命令进行推送,结尾可以加一个 enter ,直接回车
tmux send -t test "cmd" enter